package br.com.virtual.recomendar.service.impl;

import java.util.List;

import javax.ejb.Stateless;
import javax.inject.Inject;

import br.com.virtual.cadastrar.model.Pessoa;
import br.com.virtual.cadastrar.model.Produto;
import br.com.virtual.recomendar.dao.AvaliacaoDAO;
import br.com.virtual.recomendar.model.Avaliacao;
import br.com.virtual.recomendar.service.AvaliacaoService;

@Stateless
public class AvaliacaoServiceImpl implements AvaliacaoService{

	@Inject private AvaliacaoDAO avaliacaoDAO;
	
	@Override
	public Avaliacao create(Avaliacao avaliacao) {
		return avaliacaoDAO.create(avaliacao);
	}

	@Override
	public Avaliacao read(Long id) {
		return avaliacaoDAO.read(id);
	}

	@Override
	public Avaliacao update(Avaliacao avaliacao) {
		return avaliacaoDAO.update(avaliacao);
	}

	@Override
	public void delete(Avaliacao avaliacao) {
		avaliacaoDAO.delete(avaliacao);		
	}

	@Override
	public List<Avaliacao> list() {
		return avaliacaoDAO.list();
	}

	@Override
	public List<Avaliacao> listByPessoa(Pessoa pessoa) {
		return avaliacaoDAO.listByPessoa(pessoa);
	}

	@Override
	public List<Avaliacao> listByProduto(Produto produto) {
		return avaliacaoDAO.listByProduto(produto);
	}

	@Override
	public Avaliacao getAvaliacao(Produto produtoAvaliado, Pessoa avaliador) {
		
		Avaliacao avaliacao = this.avaliacaoDAO.getAvaliacao(produtoAvaliado, avaliador);
		if( avaliacao == null)
			avaliacao = new Avaliacao(produtoAvaliado, avaliador);
		return avaliacao;
	}
	
	@Override
	public Avaliacao avaliar(Produto produtoAvaliado, Pessoa avaliador, Float nota, String comentario){
		
		Avaliacao avaliacao = getAvaliacao(produtoAvaliado, avaliador);
		avaliacao.setComentario(comentario);
		avaliacao.setNota(nota);
		
		return this.avaliar(avaliacao);
		
	}

	@Override
	public Avaliacao avaliar(Avaliacao avaliacao) {
		
		avaliacao = update(avaliacao);
		return avaliacao;
	}

	@Override
	public boolean hasAvaliacao(Pessoa pessoa) {
		return avaliacaoDAO.hasAvaliacao(pessoa);
	}
	
}
